package br.com.srv.componentes.relatorio.velocidademaxima.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import HTTPClient.HTTPConnection;
import br.com.srv.dao.WebServiceBaseDAO;
import br.com.srv.model.VelocidadeMaximaTO;
import br.com.srv.util.ArenaHelper;
import br.com.srv.util.DateHelper;

public class VelocidadeMaximaDAOImpl extends WebServiceBaseDAO
	implements VelocidadeMaximaDAO {
	
	public VelocidadeMaximaDAOImpl(HTTPConnection connection) {
		setHttpConnection(connection);
	}
	
	public List<VelocidadeMaximaTO> consultaVelocidadeMaxima(VelocidadeMaximaTO velocidadeMaximaParam) throws Exception {
		String dataInicial = velocidadeMaximaParam.getDataInicial();
		String dataFinal = velocidadeMaximaParam.getDataFinal();
		String horaInicial = velocidadeMaximaParam.getHoraInicial();
		String horaFinal = velocidadeMaximaParam.getHoraFinal();		
		
		dataInicial = DateHelper.format("yyyy-MM-dd", dataInicial);
		dataFinal= DateHelper.format("yyyy-MM-dd", dataFinal);

		StringBuilder urlString = new StringBuilder(ArenaHelper.XML_READER);
		urlString.append("<COURSES>");
		urlString.append("	<VEHICLES>");
		urlString.append("		<VEHICLE_ID>" + velocidadeMaximaParam.getVeiculoId() + "</VEHICLE_ID>");
		urlString.append("	</VEHICLES>");
		urlString.append("	<START>" + dataInicial + "</START>");
		urlString.append("	<END>" + dataFinal + "</END>");
		urlString.append("	<PERIOD_PER_DAY>1</PERIOD_PER_DAY>");
		urlString.append("	<PERIOD_START>" + horaInicial + "</PERIOD_START>");
		urlString.append("	<PERIOD_END>" + horaFinal + "</PERIOD_END>");
		urlString.append("	<VEL_ANALYSIS>0</VEL_ANALYSIS>");
		urlString.append("	<VEL>0</VEL>");
		urlString.append("	<DECREASING>0</DECREASING>");
		urlString.append("	<LIMIT>");
		urlString.append("		<COUNT>0</COUNT>");
		urlString.append("		<QUANT>0</QUANT>");
		urlString.append("		<OFFSET>0</OFFSET>");
		urlString.append("	</LIMIT>");
		urlString.append("	<SHOW_FIELDS>");
		urlString.append("		<ID>1</ID>");
		urlString.append("		<DESC>1</DESC>");
		urlString.append("		<DATE_TIME>21</DATE_TIME>");
		urlString.append("		<VEL>1</VEL>");
		urlString.append("		<NEAR_DIST>1</NEAR_DIST>");
		urlString.append("		<NEAR_DESC>1</NEAR_DESC>");
		urlString.append("		<Y>1</Y>");
		urlString.append("		<X>1</X>");
		urlString.append("	</SHOW_FIELDS>");
		urlString.append("</COURSES>");

		String xml = queryArenaMethod(ArenaHelper.WEB_SERVICE_MAPCOURSES, urlString);

		List<Map> result = parseList(xml, "/COURSES/VEHICLE", "POSITION");
		
		List<VelocidadeMaximaTO> velocidades = new ArrayList<VelocidadeMaximaTO>();
		
		for (Map mapa : result) {
			VelocidadeMaximaTO velocidadeMaximaTO = new VelocidadeMaximaTO();
			velocidadeMaximaTO.setVeiculoId((String)mapa.get("ID"));
			velocidadeMaximaTO.setVeiculoDescricao((String)mapa.get("DESC"));
			velocidadeMaximaTO.setHoraData((String)mapa.get("DATE_TIME"));
			velocidadeMaximaTO.setVelocidadeMaxima((String)mapa.get("VEL"));
			velocidadeMaximaTO.setPontoMaisProximo((String)mapa.get("NEAR_DESC"));
			velocidadeMaximaTO.setDistanciaPontoMaisProximo((String)mapa.get("NEAR_DIST"));
			velocidadeMaximaTO.setX((String)mapa.get("X"));
			velocidadeMaximaTO.setY((String)mapa.get("Y"));
			velocidades.add(velocidadeMaximaTO);
		}

		return velocidades;
	}

}
